package bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.*;

@Entity
@Table(name="usuarios")
public class Usuario implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String nombre;
	private String cuit;
	private Domicilio domicilio;
	private List<Telefono> telefonos = new ArrayList<Telefono>();
	private Set<Cuenta> cuentas = new HashSet<Cuenta>();

	@Column (name = "nombre", nullable = false, length = 50)
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	@Id
	@Column (name = "cuit", nullable = false, length = 13)
	public String getCuit() {
		return cuit;
	}
	
	public void setCuit(String cuit) {
		this.cuit = cuit;
	}
	
	@Embedded
	public Domicilio getDomicilio() {
		return domicilio;
	}
	public void setDomicilio(Domicilio domicilio) {
		this.domicilio = domicilio;
	}
	
	@OneToMany (cascade=CascadeType.ALL)
	@JoinColumn(name="titular")
	public List<Telefono> getTelefonos() {
		return telefonos;
	}
	
	public void setTelefonos(List<Telefono> telefonos) {
		this.telefonos = telefonos;
	}
	
	public void addTelefono(Telefono fono){
		telefonos.add(fono);
	}
	
	@ManyToMany(cascade = {CascadeType.ALL})
	public Set<Cuenta> getCuentas() {
		return cuentas;
	}
	public void setCuentas(Set<Cuenta> cuentas) {
		this.cuentas = cuentas;
	}
	
	public void addCuenta(Cuenta cuenta){
		cuentas.add(cuenta);
	}
	
	@Override
	public boolean equals(Object obj) {
        if (this == obj) return true;
        if ( !(obj instanceof Usuario) ) return false;

        final Usuario usu = (Usuario) obj;
        if ( !usu.getCuit().equals( getCuit() ) ) return false;
        return true;
    }
	
	@Override
	public int hashCode() {
		int hc = cuit.hashCode();
		hc = cuit.length()*2*hc;
		return hc;
	}

	@Override
	public String toString() {
		return cuit+" "+nombre+" "+domicilio.toString();
	}
	
	
}
